La fricción fundamental en la física computacional surge porque las computadoras representan números reales usando matemáticas en coma flotante binaria. A diferencia del pensamiento humano en base-10 (decimal), el hardware almacena valores en base-2 (binaria). Esto da lugar a una abstracción imperfecta: fracciones decimales simples como 0.1 no pueden representarse con precisión.
1. La realidad de los números en coma flotante
Go proporciona dos tipos principales para números reales: float32 y float64. Cuando se utiliza la sintaxis abreviada para declarar variables como precio := 0.0, Go por defecto usa float64. Estos tipos son aproximaciones de la realidad, no valores matemáticos exactos.
2. El misterio del 0.1
En base-10, $1/3$ da como resultado un número decimal infinito periódico ($0.333...$). En base-2, el valor $0.1$ da como resultado un fracción periódica infinita. Debido a que la memoria de la computadora es finita, esta fracción se trunca, lo que genera errores acumulativos. Por ejemplo, $0.1 + 0.2$ da como resultado $0.30000000000000004$ en lugar de exactamente $0.3$.
Advertencia: Nunca uses == para comparar números en coma flotante en puertas lógicas, ya que estas pequeñas diferencias provocarán que las comparaciones fallen.